package com.syh.jn.scm.dto.supplier.purchase;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

@Data
@AllArgsConstructor
@Builder
@NoArgsConstructor
public class PurchaseOrderSto implements Serializable {
  /**
   * 采购单code（用于导入时匹配子项用）
   */
  private String code;
  /**
   * 采购订单类型(0：普通采购 1：直采直销 )
   */
  @NotNull(message = "采购订单类型不能为空")
  @Min(value = 0, message = "采购订单类型错误")
  @Max(value = 1, message = "采购订单类型错误")
  private Short orderType;
  /**
   * 销售订单id(当选择了直采直销时)
   */
  private Long salesOrderId;
  /**
   * 归属于那个服务商
   */
  @NotNull(message = "归属id不能为空")
  private Long businessEntityId;
  /**
   * 第三方订单号
   */
  private String extCode;
  /**
   * 上游单位的id
   */
  @NotNull(message = "上游单位id不能为空")
  private Long upStreamCompanyId;
  /**
   * 收货人姓名
   */
  @NotBlank(message = "收货人姓名不能为空")
  private String deliName;
  /**
   * 收货人联系电话
   */
  @NotBlank(message = "收货人联系电话不能为空")
  private String deliTel;
  /**
   * 要求到货时间
   */
  private Long receiveTimestamp;
  /**
   * 收货地区编码
   */
  private String deliAreaCode;
  /**
   * 收货地址省 市 区
   */
  @NotBlank(message = "收货地址省市区不能为空")
  private String deliArea;
  /**
   * 收货人详细地址
   */
  @NotBlank(message = "收货人详细地址不能为空")
  private String deliAddress;
  /**
   * 运费金额
   */
  private BigDecimal totalFreight;
  /**
   * 订单备注
   */
  private String remark;
  /**
   * 优惠金额
   */
  @DecimalMin(value = "0", message = "优惠金额必须大于0")
  private BigDecimal discount;
  /**
   * 录单日期
   */
  @NotNull(message = "录单时间不能为空")
  private Long inputDateTimestamp;
  /**
   * 录单人员id
   */
  @NotNull(message = "录单人员id不能为空")
  private Long operatorId;
  /**
   * 采购订单明细
   */
  @NotEmpty(message = "采购订单明细不能为空")
  protected List<PurchaseOrderItemSTO> items;

  @Data
  public class PurchaseOrderItemSTO implements Serializable {
    /**
     * 采购单id（用于导入时匹配主项用）
     */
    private String purchaseOrderCode;
    /**
     * 商品id
     */
    @NotNull(message = "商品id不能为空")
    private Long goodsId;
    /**
     * 销售订单项id
     */
    private Long saleOrderItemId;
    /**
     * 单价
     */
    @NotNull(message = "单价不能为空")
    @DecimalMin(value = "0", message = "单价必须大于0")
    private BigDecimal price;
    /**
     * 商品数量
     */
    @NotNull(message = "商品数量不能为空")
    @DecimalMin(value = "0", message = "商品数量必须大于0")
    private BigDecimal quantity;
    /**
     * 备注
     */
    @Length(max = 500, message = "备注最大长度为500")
    private String remark;
  }
}
